home *** CD-ROM | disk | FTP | other *** search
/ PC Elektro 3 / PC-Elektro-3-cd1.bin / KBan 2.0 / KBANSRC.LZH / SRC / PROG / CMD / STBLOCK.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-07  |  2.7 KB  |  117 lines

  1. /*
  2.  * the class STAGE_BLOCK_CORE
  3.  * Copyright (C) 1996, 1997 Kazutaka Hirata <khirata@jove.acs.unt.edu>
  4.  */
  5.  
  6. #include "../stdafx.h"
  7.  
  8. #include "../common/bool.h"
  9.  
  10. #include "stblock.h"
  11.  
  12. STAGE_BLOCK_CORE::STAGE_BLOCK_CORE(const FLAG& block_layer, const XY& ac)
  13.   : m_ac1(ac),
  14.     m_mcur(m_ac1),
  15.     m_done(false),
  16.     m_block_layer(block_layer),
  17.     m_moved(false),
  18.     m_pc_old()
  19. {
  20. }
  21.  
  22. STAGE_BLOCK_CORE::STAGE_BLOCK_CORE(const FLAG& block_layer, const XY& ac, const XY& pc_old)
  23.   : m_ac1(ac),
  24.     m_mcur(m_ac1),
  25.     m_done(false),
  26.     m_block_layer(block_layer),
  27.     m_moved(true),
  28.     m_pc_old(pc_old)
  29. {
  30. }
  31.  
  32. STAGE* STAGE_BLOCK_CORE::init(KBAN_INFO& info, KBAN_DRAW& draw)
  33. {
  34.   info.bCaptured() = true;
  35.   if(info.bClipped()) {
  36.     info.bClipped() = false;
  37.     KBAN_DATA& kban_data = info.kban_data();
  38.     KBAN_DATA kban_data_selected;
  39.     kban_data.collect_selected_items(kban_data_selected);
  40.     uint active_layer = info.active_layer().get();
  41.     draw.draw_kban_data(kban_data_selected, active_layer);
  42.     kban_data.unselect();
  43.   }
  44.   if(m_moved.get()) {
  45.     mouse_move(info, draw, m_pc_old, 0);
  46.   } else {
  47.     m_mcur.redraw_cursor(draw);
  48.   }
  49.   return this;
  50. }
  51.  
  52. STAGE* STAGE_BLOCK_CORE::redraw(KBAN_INFO& info, KBAN_DRAW& draw)
  53. {
  54.   m_mcur.redraw_cursor(draw);
  55.   return this;
  56. }
  57.  
  58. STAGE* STAGE_BLOCK_CORE::mouse_move(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
  59. {
  60.   m_moved.set(true);
  61.   m_pc_old = pc;
  62.  
  63.   XY ac2;
  64.   info.grid().xy_pc2ac(pc, ac2);
  65.   m_mcur.draw_cursor(draw, ac2);
  66.   return this;
  67. }
  68.  
  69. STAGE* STAGE_BLOCK_CORE::mouse_left_up(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
  70. {
  71.   XY ac2;
  72.   info.grid().xy_pc2ac(pc, ac2);
  73.  
  74.   m_mcur.erase_cursor(draw);
  75.  
  76.   KBAN_DATA& kban_data = info.kban_data();
  77.   if(m_block_layer.get()) {
  78.     uint nLayer = info.active_layer().get();
  79.     LAYER& layer = kban_data.primitive().layer(nLayer);
  80.     layer.select_items_in_block(m_ac1, ac2);
  81.   } else {
  82.     kban_data.select_items_in_block(m_ac1, ac2);
  83.   }
  84.  
  85.   KBAN_DATA kban_data_selected;
  86.   kban_data.collect_selected_items(kban_data_selected);
  87.   if(!kban_data_selected.empty()) {
  88.     info.bSelected() = true;
  89.     uint active_layer = info.active_layer().get();
  90.     draw.draw_kban_data_target(kban_data_selected, active_layer);
  91.   }
  92.  
  93.   info.new_state().set(true);
  94.   if(m_block_layer.get()) {
  95.     info.new_state_str() = "Block Layer";
  96.   } else {
  97.     info.new_state_str() = "Block";
  98.   }
  99.  
  100.   m_done.set(true);
  101.  
  102.   return NULL;
  103. }
  104.  
  105. STAGE* STAGE_BLOCK_CORE::mouse_right_up(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
  106. {
  107.   return NULL;
  108. }
  109.  
  110. void STAGE_BLOCK_CORE::end(KBAN_INFO& info, KBAN_DRAW& draw)
  111. {
  112.   info.bCaptured() = false;
  113.   if(!m_done.get()) {
  114.     m_mcur.erase_cursor(draw);
  115.   }
  116. }
  117.